package com.biao.test_annotation.refect_test;

import com.biao.test_annotation.InitDemo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

/**
 * 玩一玩反射特性
 */
public class CreateWay {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        // 第 1 种
        Class<InitDemo> nameClass = InitDemo.class;
        InitDemo initDemo = nameClass.newInstance();

        // 第 2 种,一般写框架大多用这种方式
        Class<?> pathClass = Class.forName("com.biao.test_annotation.InitDemo");
        InitDemo initDemo2 = (InitDemo) pathClass.newInstance();
        System.out.println(nameClass == pathClass);     // 获取到的class相等

        // 第 3 种
        InitDemo newInitDemo = new InitDemo();
        Class<? extends InitDemo> objectClass = newInitDemo.getClass();
        InitDemo initDemo3 = objectClass.newInstance();
        System.out.println(pathClass == objectClass);   // 获取到的class相等

    }
}
